package com.review.lock;

import java.sql.*;

public class SingletonDemo {
    private SingletonDemo() {
    }

    private volatile static SingletonDemo instance = null;

    public static SingletonDemo getInstance() {
        //第一重检查：针对很多个线程同时想要创建对象的情况
        if (instance == null) {
            synchronized (SingletonDemo.class) {
                //第二重锁检查(针对比如A,B两个线程都为null，第一个线程创建完对象，第二个等待锁的线程拿到锁的情况)
                if (instance == null) {
                    instance = new SingletonDemo();
                }
            }
        }
        return instance;
    }

}
/*
new 一个对象的过程
1.在堆中分配对象内存
2.填充对象必要信息+具体数据初始化+末位填充
3.将引用指向这个对象的堆内地址
 */